<TagAttribute("particle_system","pctl","????","????",4,104)>
Public Class PARTICLE_SYSTEM_TAG
Inherits HaloTag
Public Const Extension as String = "particle_system"
Public Const FourCC as String = "pctl"
Public Const ParentFourCC as String = "????"
Public Const GrandParentFourCC as String = "????"
Public Const [Version] as Short = 4
Public Const HeaderLength as Integer = 104

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 52, -1)>
Public padding_1 as Byte()

''' <summary>
''' These settings affect the behavior of the system's origin.
''' </summary>
#Region "system behavior"

''' <summary>
''' 
''' </summary>
<TagField("point physics", 16, 10)>
Public point_physics as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("system update physics", 1, 17)>
Public system_update_physics as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding_2 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("physics flags", 1, 20)>
Public physics_flags as Integer

''' <summary>
''' particle_system_physics_constants_block
''' </summary>
<TagField("physics constants", 4, 11)>
Public physics_constants as List(Of PHYSICS_CONSTANTS_BLOCK)

''' <summary>
''' particle_system_types_block
''' </summary>
<TagField("particle types", 128, 11)>
Public particle_types as List(Of PARTICLE_TYPES_BLOCK)
#End Region
Public Class PHYSICS_CONSTANTS_BLOCK

''' <summary>
''' The meaning of this constant depends on the selected physics creation/update function.
''' </summary>
<TagField("k", 1, 0)>
Public k as Single

End Class
Public Class PARTICLE_TYPES_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("name^", 32, 8)>
Public name as String

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 20)>
Public flags as Integer

''' <summary>
''' 
''' </summary>
<TagField("initial particle count", 1, 23)>
Public initial_particle_count as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding as Byte()

''' <summary>
''' 
''' </summary>
<TagField("complex sprite render modes", 1, 17)>
Public complex_sprite_render_modes as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding_1 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("radius:world units", 1, 0)>
Public radius as Single

''' <summary>
''' 
''' </summary>
<TagField("", 36, -1)>
Public padding_2 as Byte()

''' <summary>
''' This controls the initial placement of particles.
''' </summary>
<TagField("particle creation physics", 1, 17)>
Public particle_creation_physics as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding_3 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("physics flags", 1, 20)>
Public physics_flags as Integer

''' <summary>
''' particle_system_physics_constants_block
''' </summary>
<TagField("physics constants", 4, 11)>
Public physics_constants as List(Of PHYSICS_CONSTANTS_BLOCK)

''' <summary>
''' particle_system_type_states_block
''' </summary>
<TagField("states", 192, 11)>
Public states as List(Of STATES_BLOCK)

''' <summary>
''' particle_system_type_particle_states_block
''' </summary>
<TagField("particle states", 376, 11)>
Public particle_states as List(Of PARTICLE_STATES_BLOCK)
Public Class PHYSICS_CONSTANTS_BLOCK

''' <summary>
''' The meaning of this constant depends on the selected physics creation/update function.
''' </summary>
<TagField("k", 1, 0)>
Public k as Single

End Class
Public Class STATES_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("name^", 32, 8)>
Public name as String

''' <summary>
''' Time in this state.
''' </summary>
<TagField("duration bounds:seconds", 2, 1)>
Public duration_bounds as Single()

''' <summary>
''' Time spent in transition to next state.
''' </summary>
<TagField("transition time bounds:seconds", 2, 1)>
Public transition_time_bounds as Single()

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding as Byte()

''' <summary>
''' This value will be multiplied into the scale computed by the particles' state.
''' </summary>
<TagField("scale multiplier", 1, 0)>
Public scale_multiplier as Single

''' <summary>
''' This value will be multiplied into the animation rate computed by the particles' state.
''' </summary>
<TagField("animation_rate_multiplier", 1, 0)>
Public animation_rate_multiplier as Single

''' <summary>
''' This value will be multiplied into the rotation rate computed by the particles' state.
''' </summary>
<TagField("rotation rate multiplier", 1, 0)>
Public rotation_rate_multiplier as Single

''' <summary>
''' This value will be multiplied into the color computed by the particles' state.
''' </summary>
<TagField("color multiplier", 4, 3)>
Public color_multiplier as Single()

''' <summary>
''' This value will be multiplied into the radius computed by the type.
''' </summary>
<TagField("radius multiplier", 1, 0)>
Public radius_multiplier as Single

''' <summary>
''' 
''' </summary>
<TagField("minimum particle count", 1, 0)>
Public minimum_particle_count as Single

''' <summary>
''' 
''' </summary>
<TagField("particle creation rate:particles per second", 1, 0)>
Public particle_creation_rate as Single

''' <summary>
''' 
''' </summary>
<TagField("", 84, -1)>
Public padding_1 as Byte()

''' <summary>
''' This controls the placement of particles created during this state.
''' </summary>
<TagField("particle creation physics", 1, 17)>
Public particle_creation_physics as Short

''' <summary>
''' This controls the motion of particles during this state.
''' </summary>
<TagField("particle update physics", 1, 17)>
Public particle_update_physics as Short

''' <summary>
''' particle_system_physics_constants_block
''' </summary>
<TagField("physics constants", 4, 11)>
Public physics_constants as List(Of PHYSICS_CONSTANTS_BLOCK)
Public Class PHYSICS_CONSTANTS_BLOCK

''' <summary>
''' The meaning of this constant depends on the selected physics creation/update function.
''' </summary>
<TagField("k", 1, 0)>
Public k as Single

End Class

End Class
Public Class PARTICLE_STATES_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("name^", 32, 8)>
Public name as String

''' <summary>
''' Time in this state.
''' </summary>
<TagField("duration bounds:seconds", 2, 1)>
Public duration_bounds as Single()

''' <summary>
''' Time spent in transition to next state.
''' </summary>
<TagField("transition time bounds:seconds", 2, 1)>
Public transition_time_bounds as Single()

''' <summary>
''' 
''' </summary>
<TagField("bitmaps", 16, 10)>
Public bitmaps as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("sequence index", 1, 23)>
Public sequence_index as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding_1 as Byte()

''' <summary>
''' Apparent size of the particles.
''' </summary>
<TagField("scale:world units per pixel", 2, 1)>
Public scale as Single()

''' <summary>
''' Rate of sprite animation.
''' </summary>
<TagField("animation rate:frames per second", 2, 1)>
Public animation_rate as Single()

''' <summary>
''' Rate of texture rotation.
''' </summary>
<TagField("rotation rate:degrees per second", 2, 1)>
Public rotation_rate as Single()

''' <summary>
''' Particle will have a random color in the range determined by these two colors.
''' </summary>
<TagField("color 1", 4, 3)>
Public color_1 as Single()

''' <summary>
''' Particle will have a random color in the range determined by these two colors.
''' </summary>
<TagField("color 2", 4, 3)>
Public color_2 as Single()

''' <summary>
''' This value will be multiplied into the radius computed by the type.
''' </summary>
<TagField("radius multiplier", 1, 0)>
Public radius_multiplier as Single

''' <summary>
''' 
''' </summary>
<TagField("point physics", 16, 10)>
Public point_physics as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("", 36, -1)>
Public padding_2 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 40, -1)>
Public padding_3 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("shader flags", 1, 19)>
Public shader_flags as Short

''' <summary>
''' 
''' </summary>
<TagField("framebuffer blend function", 1, 17)>
Public framebuffer_blend_function as Short

''' <summary>
''' 
''' </summary>
<TagField("framebuffer fade mode", 1, 17)>
Public framebuffer_fade_mode as Short

''' <summary>
''' 
''' </summary>
<TagField("map flags", 1, 19)>
Public map_flags as Short

''' <summary>
''' 
''' </summary>
<TagField("", 28, -1)>
Public padding_4 as Byte()

''' <summary>
''' Optional multitextured second map
''' </summary>
#Region "Secondary Map"

''' <summary>
''' 
''' </summary>
<TagField("bitmap", 16, 10)>
Public bitmap as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("anchor", 1, 17)>
Public anchor as Short

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 19)>
Public flags as Short

''' <summary>
''' 
''' </summary>
<TagField("u-animation source", 1, 17)>
Public u as Short

''' <summary>
''' 
''' </summary>
<TagField("u-animation function", 1, 17)>
Public u_1 as Short

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("u-animation period:seconds", 1, 0)>
Public u_2 as Single

''' <summary>
''' 
''' </summary>
<TagField("u-animation phase", 1, 0)>
Public u_3 as Single

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("u-animation scale:repeats", 1, 0)>
Public u_4 as Single

''' <summary>
''' 
''' </summary>
<TagField("v-animation source", 1, 17)>
Public v as Short

''' <summary>
''' 
''' </summary>
<TagField("v-animation function", 1, 17)>
Public v_1 as Short

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("v-animation period:seconds", 1, 0)>
Public v_2 as Single

''' <summary>
''' 
''' </summary>
<TagField("v-animation phase", 1, 0)>
Public v_3 as Single

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("v-animation scale:repeats", 1, 0)>
Public v_4 as Single

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation source", 1, 17)>
Public rotation as Short

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation function", 1, 17)>
Public rotation_1 as Short

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("rotation-animation period:seconds", 1, 0)>
Public rotation_2 as Single

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation phase", 1, 0)>
Public rotation_3 as Single

''' <summary>
''' 0 defaults to 360
''' </summary>
<TagField("rotation-animation scale:degrees", 1, 0)>
Public rotation_4 as Single

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation center", 2, 1)>
Public rotation_5 as Single()

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding_5 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("zsprite radius scale", 1, 0)>
Public zsprite_radius_scale as Single

''' <summary>
''' 
''' </summary>
<TagField("", 20, -1)>
Public padding_6 as Byte()

''' <summary>
''' particle_system_physics_constants_block
''' </summary>
<TagField("physics constants", 4, 11)>
Public physics_constants as List(Of PHYSICS_CONSTANTS_BLOCK)
#End Region
Public Class PHYSICS_CONSTANTS_BLOCK

''' <summary>
''' The meaning of this constant depends on the selected physics creation/update function.
''' </summary>
<TagField("k", 1, 0)>
Public k as Single

End Class

End Class

End Class

End Class
